#pragma once
#include "DXAMLCommon.h"


#include "IPALDebuggingServices.h"
#include "IPALMemoryServices.h"
#include "IPALURIServices.h"
#include "IPALMathServices.h"
#include "IPALStringServices.h"
#include "IPALPrintIOServices.h"
#include "IPALThreadingServices.h"
#include "IPALUIServices.h"
#include "IPALTextServices.h"
#include "IPALCoreServices.h"
#include "IPALTouchInteractionServices.h"
#include "IPALCLRServices.h"
#include "IPALOfflineApplicationServices.h"
#include "IPALRegkeyServices.h"
#include "IPALWebcamServices.h"
#include "IPALSettingsServices.h"
#include "IPALFileSystemServices.h"
#include "IPALPrintingServices.h"
#include "IPALImagingServices.h"

struct IPALOutputProtectionUtilities;
struct IPALOutputProtection;
struct IPALSurfaceUpdatePoolMap;
struct IPALResourceProvider;
struct IPALApplicationDataProvider;
struct IPALWorkItemFactory;

class IPlatformServices :
	public IPALDebuggingServices,
	public IPALMemoryServices,
	public IPALURIServices,
	public IPALMathServices,
	public IPALStringServices,
	public IPALPrintIOServices,
	public IPALThreadingServices,
	public IPALUIServices,
	public IPALTextServices,
	public IPALCoreServices,
	public IPALTouchInteractionServices,
	public IPALCLRServices,
	public IPALOfflineApplicationServices,
	public IPALRegkeyServices,
	public IPALWebcamServices,
	public IPALSettingsServices,
	public IPALFileSystemServices,
	public IPALPrintingServices,
	public IPALImagingServices
{
public:
	virtual void SetCanLoadAssembliesDomainNeutral( XUINT32 pValue) = 0;
	virtual XBOOL CanLoadAssembliesDomainNeutral() = 0;
	virtual void SetCustomControlHostExists(XUINT32 pValue) = 0;
	virtual XBOOL CustomControlHostExists() = 0;
	virtual HRESULT GetSystemSetting( _SystemSettingsType setting, CValue *pValue) = 0;
	virtual HRESULT GetSystemColor(XINT32 colorIndex, XINT32 * pSysColor) = 0;
	virtual HRESULT CreateGraphicsDeviceManager( IPALGraphicsDeviceManager **ppIGraphicsDeviceManager) = 0;
	virtual HRESULT CreateSurfaceUpdatePoolMap( IPALSurfaceUpdatePoolMap **ppSurfaceUpdatePoolMap) = 0;
	virtual HRESULT ReaderCreate( IPALReader **ppReader) = 0;
	virtual HRESULT BrowserHostCreate( IXcpHostSite *pSite, IXcpDispatcher *pDispatcher, IXcpBrowserHost **ppHost) = 0;
	virtual HRESULT RequestQuota(const void * hwndOwner, const XCHAR * pszSite, const XDOUBLE nUsedInMB, const XDOUBLE nRequestedInMB) = 0;
	virtual HRESULT OutputProtectionCreate(IPALOutputProtectionUtilities * pUtilities, IPALOutputProtection * * ppOutputProtection, enum OutputProtectionOptions::Value Options) = 0;
	virtual HRESULT FetchAbsoluteUri( XUINT32 cAbsoluteUri, XCHAR * pAbsoluteUri, XINT32 (__stdcall *fnAbortQueryCallback)(XUINT32, void *), XUINT32 cbAbortContext, char *pvAbortContext, XCHAR * sUserAgent, IPALDownloadResponse **ppiDownloadResponse) = 0;
	virtual HRESULT CreateResourceProvider( IPALResourceProvider **ppResourceProvider) = 0;
	virtual HRESULT CreateApplicationDataProvider( IPALApplicationDataProvider **ppAppDataProvider) = 0;
	virtual HRESULT CreateWorkItemFactory( IPALWorkItemFactory **ppFactory) = 0;
	virtual HRESULT CreateIPALStreamFromIPALMemory( IPALMemory *pPALMemory, IPALStream **ppPALStream) = 0;
};